package com.shopmall.controller;

import com.shopmall.pojo.Admin;
import com.shopmall.pojo.AdminRecord;
import com.shopmall.pojo.Goods;
import com.shopmall.service.AdminRecordService;
import com.shopmall.service.AdminRecordServiceImpl;
import com.shopmall.service.AdminServiceImpl;
import com.shopmall.service.GoodsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Timestamp;
import java.util.UUID;

@Controller
public class FileController {

    @Autowired
    GoodsServiceImpl goodsService;

    @Autowired
    AdminServiceImpl adminService;

    @Autowired
    AdminRecordServiceImpl adminRecordService;

    /*

    @RequestMapping("/file/upload")
    public String upload (@RequestParam("file") MultipartFile file, Model model) {
        // 获取原始名字
        String fileName = file.getOriginalFilename();
        // 获取后缀名
        // String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 文件保存路径
        String filePath = "d:/upload/";
        // 文件重命名，防止重复
        fileName = filePath + UUID.randomUUID() + fileName;
        // 文件对象
        File dest = new File(fileName);
        // 判断路径是否存在，如果不存在则创建
        if(!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            // 保存到服务器中
            file.transferTo(dest);
            model.addAttribute("filePath",fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "/home";
    }

     */

    /*
    @RequestMapping("download")
    public void download(HttpServletResponse response) throws Exception {
        // 文件地址，真实环境是存放在数据库中的
        File file = new File("D:\\upload\\a.txt");
        // 穿件输入对象
        FileInputStream fis = new FileInputStream(file);
        // 设置相关格式
        response.setContentType("application/force-download");
        // 设置下载后的文件名以及header
        response.addHeader("Content-disposition", "attachment;fileName=" + "a.txt");
        // 创建输出对象
        OutputStream os = response.getOutputStream();
        // 常规操作
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = fis.read(buf)) != -1) {
            os.write(buf, 0, len);
        }
        fis.close();
    }
    */

    @RequestMapping("/goods/upload_goods_pic/{id}")
    public String upload_goods_pic(@PathVariable("id") int id, Model model){
        model.addAttribute("id",id);
        return "/goods/upload_goods_pic";
    }

    //上传商品图片
    @RequestMapping("/goods/upload_goods_pic_do")
    public String upload_goods_pic_do(@RequestParam("file") MultipartFile file,
                                   Model model, @RequestParam("id") int id, HttpSession session){
        Timestamp date = new Timestamp(System.currentTimeMillis());
        Admin account = (Admin) session.getAttribute("admin");
        AdminRecord record = new AdminRecord();
        record.setDo_who(account.getUsername());
        record.setDo_time(date);
        int state = account.getState();
        String string1;
        if(state==0){
            string1="超级管理员";
        }
        else if(state==1){
            string1="系统管理员";
        }
        else {
            string1="商品管理员";
        }
        record.setDo_role(string1);
        record.setDone_who(""+id);
        record.setDone_role("商品");
        record.setDo_what("修改商品图片");
        //以上是记录信息设置

        Goods goods=new Goods();
        goods.setGoods_id(id);
        goods.setUpdate_date(date);
        // 获取原始名字
        String fileName = file.getOriginalFilename();
        // 获取后缀名
        // String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 文件保存路径
        String filePath = "D:/sprintbootLearn/qimo/shopmall/src/main/resources/static/goods_pic/";
        // 文件重命名，防止重复

        fileName = UUID.randomUUID() + fileName;
        String fileName_real= fileName;  //暂存加上随机字符串后的，文件名，并改成 thymeleaf 相对路径格式

        fileName = filePath + fileName; //文件保存在本地的绝对路径
        // 文件对象
        File dest = new File(fileName);     //保存文件时，要使用绝对路径，但使用<img>读取文件时，不能使用绝对路径，会读取失败
        // 判断路径是否存在，如果不存在则创建
        if(!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            // 保存到服务器中
            file.transferTo(dest);
            goods.setPic(fileName_real);    //////注意这里设置的 filename 是适用于 thymeleaf 读取的 文件相对路径
            goodsService.goodsPic(goods);
            adminRecordService.addRecord(record);
            model.addAttribute("msg","修改商品图片成功！");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/goods/goods_show";
    }

    //上传头像图片
    @RequestMapping("/goods/upload_head_pic_do")
    public String upload_head_pic_do(@RequestParam("file") MultipartFile file,
                                      Model model, @RequestParam("id") int id, HttpSession session){
        Timestamp date = new Timestamp(System.currentTimeMillis());
        Admin account = (Admin) session.getAttribute("admin");
        AdminRecord record = new AdminRecord();
        record.setDo_who(account.getUsername());
        record.setDo_time(date);
        int state = account.getState();
        String string1;
        if(state==0){
            string1="超级管理员";
        }
        else if(state==1){
            string1="系统管理员";
        }
        else {
            string1="商品管理员";
        }
        record.setDo_role(string1);
        record.setDone_who(""+id);
        record.setDone_role("个人信息");
        record.setDo_what("修改个人头像");
        //以上是记录信息设置

        Admin admin=new Admin();
        admin.setAdmin_id(id);
        admin.setUpdate_date(date);

        // 获取原始名字
        String fileName = file.getOriginalFilename();
        // 获取后缀名
        // String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 文件保存路径
        String filePath = "D:/sprintbootLearn/qimo/shopmall/src/main/resources/static/goods_pic/";
        // 文件重命名，防止重复

        fileName = UUID.randomUUID() + fileName;
        String fileName_real= fileName;  //暂存加上随机字符串后的，文件名，并改成 thymeleaf 相对路径格式

        fileName = filePath + fileName; //文件保存在本地的绝对路径
        // 文件对象
        File dest = new File(fileName);     //保存文件时，要使用绝对路径，但使用<img>读取文件时，不能使用绝对路径，会读取失败
        // 判断路径是否存在，如果不存在则创建
        if(!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            // 保存到服务器中
            file.transferTo(dest);
            admin.setHead_pic(fileName_real);    //////注意这里设置的 filename 是适用于 thymeleaf 读取的 文件相对路径
            adminService.headPic(admin);
            adminRecordService.addRecord(record);
            model.addAttribute("msg","修改个人头像成功！");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "/home";
    }
}
